package edu.hubu.supermarketmanagementsystem.controller;

import edu.hubu.supermarketmanagementsystem.entity.Admin;
import edu.hubu.supermarketmanagementsystem.entity.Customer;
import edu.hubu.supermarketmanagementsystem.service.CustomerService;
import edu.hubu.supermarketmanagementsystem.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin
public class CustomerController {

    @Autowired
    private CustomerService customerService;

    /**
     * 用于注册顾客账户。
     *
     * @param username  顾客的用户名。
     * @param name      顾客的姓名。
     * @param password  顾客的密码。
     * @param email     顾客的电子邮箱地址。
     * @param telephone 顾客的电话号码。
     * @param address   顾客的邮寄地址。
     * @return 如果注册成功，则返回的 ResultVO 对象中包含顾客实体本身。
     */
    @RequestMapping("/customer/register")
    public ResultVO<Customer> register(String username, String name, String password, String email, String telephone, String address, String role ){
        return customerService.register(username, name, password, email, telephone, address, role);
    }

    /**
     * 用于获取顾客基本信息名单。
     * @return 带有用户基本信息 Java Beans 数组的 ResultVO 实体。
     */
    @RequestMapping("/customer/getCustomersList")
    public ResultVO<Customer[]> getCustomersList() {
        return customerService.getCustomersList();
    }

    /**
     * 用于更新员工信息。
     * @param id 待更新信息的用户ID。
     * @param username 更新后的用户名。
     * @param name 更新后的姓名。
     * @param telephone 更新后的电话号码。
     * @param role 更新后的角色。
     * @return 如果更新成功，则返回的 ResultVO 实体中包含 true，否则包含 false。
     */
    @RequestMapping("customer/updateUser")
    public ResultVO<Object> updateUser(Integer id, String username, String name, String email, String telephone, String address, String role) {
        return customerService.updateUser(id, username, name, email, telephone, address ,role);
    }

    /**
     * 用于更新顾客的密码。由于密码在数据库内以 SHA256 散列后的形式储存，需要额外的方法更新密码。
     * @param id 待更新密码的用户ID。
     * @param password 更新后的密码。
     * @return 如果更新成功，则返回的 ResultVO 实体中包含 true，否则包含 false。
     */
    @RequestMapping("customer/updateUserPassword")
    public ResultVO<Boolean> updateUserPassword(Integer id, String password) {
        return customerService.updatePassword(id, password);
    }

    /**
     * 用于删除员工账户。
     * @param id 待删除的用户ID。
     * @return 如果删除成功，则返回的 ResultVO 实体中包含 true，否则包含 false。
     */
    @RequestMapping("customer/deleteUser")
    public ResultVO<Boolean> deleteUser(Integer id) {
        return customerService.deleteUser(id);
    }
}
